// 入口文件
const express = require('express');
const cors = require('cors');
const path = require('path');
const e_jwt = require('express-jwt');
const multer = require('multer');
// 配置文件的上传位置
const upload = multer({ dest: 'uploads/' })
const loginRouter = require(path.join(__dirname, 'router/router-login'));
const userRouter = require(path.join(__dirname, 'router/router-user'));
const articleRouter = require(path.join(__dirname, 'router/router-article'))

const app = express();

// 静态资源服务
app.use(express.static('uploads'));
app.use(express.static('public'));

// 解决跨域问题
app.use(cors());

// 处理客户端请求post参数
// for parsing application/json
app.use(express.json());
// for parsing application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));

// 解析token字符串，控制哪些接口必须登录才能访问
// 把用户保存的数据，放到 req.user 的变量上
app.use(e_jwt({ secret: 'JWT-Secret' }).unless({ path: /^\/api/ }));

// 登录注册模块
app.use('/api', loginRouter);
// 个人中心模块
app.use('/my', userRouter);
// 文章模块
app.use('/my', articleRouter);

// 测试一哈
app.get('/test', (req, res) => {
    res.send('hello');
})

// 文件上传
app.post('/api/upload', upload.single('avatar'), (req, res, next) => {
    // console.log(req.file);
    // 图片后缀
    let suffix = req.file.originalname.substring(req.file.originalname.indexOf('.') + 1);
    res.json({
        status: 0,
        message: '上传成功',
        data: req.file.filename + '.' + suffix
    });
})

//中间件错误处理 404
//原理：代码是从上往下执行的，到最后都没有匹配到就是404错误
app.use((req, res) => {
    res.send("404 Page NotFind");
})

//错误统一处理 
//注意 形参可以不写，但是顺序不可以乱
app.use((err, req, res, next) => {
    // 详细错误信息
    console.error(err.stack)
    // 简洁错误信息
    console.error(err.message)
    // res.status用于设置一个http响应状态吗
    res.status(500).send('服务端发生错误！')
})


// 监听端口
app.listen(8888, () => {
    console.log('running...');
})